package com.luom.fsp.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.luom.fsp.common.WeixinSessionResponse;
import com.luom.fsp.model.dto.user.*;
import com.luom.fsp.model.entity.User;
import com.luom.fsp.model.vo.CouponVO;
import com.luom.fsp.model.vo.LoginUserVO;
import com.luom.fsp.model.vo.UserVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 用户服务
 *
*/
public interface UserService extends IService<User> {


    /**
     * 获取当前登录用户
     *
     * @param request
     * @return
     */
    User getLoginUser(HttpServletRequest request);


    /**
     * 是否为管理员
     *
     * @param request
     * @return
     */
    boolean isAdmin(HttpServletRequest request);

    /**
     * 是否为管理员
     *
     * @param user
     * @return
     */
    boolean isAdmin(User user);

    /**
     * 用户注销
     *
     * @param request
     * @return
     */
    boolean userLogout(HttpServletRequest request);

    /**
     * 获取脱敏的已登录用户信息
     *
     * @return
     */
    LoginUserVO getLoginUserVO(User user);

    /**
     * 获取脱敏的用户信息
     *
     * @param user
     * @return
     */
    UserVO getUserVO(User user);

    /**
     * 获取脱敏的用户信息
     *
     * @param userList
     * @return
     */
    List<UserVO> getUserVO(List<User> userList);

    /**
     * 获取查询条件
     *
     * @param userQueryRequest
     * @return
     */
    QueryWrapper<User> getQueryWrapper(UserQueryRequest userQueryRequest);

    /**
     * 管理员登录
     * @param adminLoginRequest
     * @return
     */
    String adminLogin(AdminLoginRequest adminLoginRequest);

    /**
     * 注册
     * @param userRegisterRequest
     * @return
     */
    Boolean userRegister(UserRegisterRequest userRegisterRequest);

    /**
     * 获取微信sessionKey
     * @param code
     * @return
     */
    WeixinSessionResponse getSessionKey(String code) throws JsonProcessingException;

    /**
     * 获取手机号
     *
     * @param encryptedData
     * @param sessionKey
     * @param iv
     * @return
     */
//    String getPhoneNumber(String encryptedData, String sessionKey, String iv);

    /**
     * 新增用户
     * @param userAddRequest
     * @return
     */
    Long addUser(UserAddRequest userAddRequest);

    /**
     * 更新信息时参数校验
     * @param user
     * @return
     */
    boolean checkUpdate(User user);

    /**
     * 用户登录
     * @param adminLoginRequest
     * @return
     */
    String userLogin(AdminLoginRequest adminLoginRequest);

    /**
     * 微信登录
     * @param loginRequest
     * @return
     */
    String wxLogin(UserLoginRequest loginRequest) throws JsonProcessingException;

    /**
     * 保存用户到redis
     * @param user
     */
    void saveUserToRedis(User user);

    /**
     * 从redis删除用户
     * @param user
     * @return
     */
    CompletableFuture<Boolean> deleteUserToRedisAsync(User user);

    /**
     *  更新用户
     * @param userUpdateRequest
     * @return
     */
    boolean updateUser(UserUpdateRequest userUpdateRequest);

}
